package com.leetcode.www;

/**
 * Creared with IntelliJ IDEA.
 * Description:给你一份『词汇表』（字符串数组）words和一张『字母表』（字符串）chars。
 *
 * 假如你可以用chars中的『字母』（字符）拼写出 words中的某个『单词』（字符串），那么我们就认为你掌握了这个单词。
 *
 * 注意：每次拼写（指拼写词汇表中的一个单词）时，chars 中的每个字母都只能用一次。
 *
 * 返回词汇表words中你掌握的所有单词的 长度之和。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/find-words-that-can-be-formed-by-characters
 * User:yxd
 * Date:2022-01-20
 * Time:23:03
 */
public class Normal1160 {
    public static void main(String[] args) {
        String[] words = {"cat","bt","hat","tree"};
        String chars = "atach";
        System.out.println(countCharacters(words, chars));

    }
    public static int countCharacters(String[] words, String chars) {
        if(words == null)return 0;
        int[] a = new int[26];
        for(int i = 0;i < chars.length();i ++){
            a[chars.charAt(i) - 'a'] += 1;
        }
        int sum = 0;
        for(String word:words){
            int[] b = new int[26];
            boolean flg = false;
            for(int j = 0;j < word.length();j ++){
                if(a[word.charAt(j) - 'a'] > 0 && a[word.charAt(j) - 'a'] > b[word.charAt(j) - 'a']){//字符串中每个字母的个数都应存在且其个数应小于字母表中的字母个数
                    flg = true;
                    b[word.charAt(j) - 'a'] += 1;//此位置上的个数加一
                }else{
                    flg = false;
                    break;
                }
            }
            if(flg){
                sum += word.length(); //满足条件的字符串
            }
        }
        return sum;
    }
}
